'''
问题描述

　　只能被 1 和本身整除的数称为质数。
　　请问在 1 （含）到 1000000 （含）中，有多少个质数的各个数位上的数字之和为 23 。
　　提示：599 就是这样一个质数，各个数位上的数字之和为 5+9+9=23 。
'''

def is_prime(n):
    """检查一个数是否是质数"""
    if n <= 1:
        return False
    if n <= 3:
        return True
    if n % 2 == 0 or n % 3 == 0:
        return False
    i = 5
    while i * i <= n:
        if n % i == 0 or n % (i + 2) == 0:
            return False
        i += 6
    return True

def sum_of_digits(n):
    """计算一个数各个数位上的数字之和"""
    return sum(int(digit) for digit in str(n))

# 生成1到1000000之间的所有质数
primes = [n for n in range(2, 1000001) if is_prime(n)]

# 检查质数的各个数位之和是否为23
count = 0
for prime in primes:
    if sum_of_digits(prime) == 23:
        count += 1

print(f"在1到1000000之间，有{count}个质数的各个数位之和为23。")